实现：在微信端涉及到付款的时候，可以直接调用微信自带的微信支付功能。


步骤：
	1、引入文件：Jssdk.class.php, 【路径：/ThinkPHP/Library/Org/Jssdk (Jssdk是自己创建的文件夹)】
	2、设置配置项【路径：/Application/Common/Conf/config.php】,添加如下两段代码。
		<?php
			'APP_ID'=>'wx6fa24506c80f09de',
  			'APP_SECRET'=>'d9e8740cf8f9f94236239beec2809f75',
		?>
	3、在控制器里添加方法【以路径：/Application/Weixin/Controller/OrderController.class.php】为例；
		这里有两个比较坑的地方，
			其一：在前台页面跳转到微信支付（new_pay）方法的时候, 是不能传参的，
					所以需要在上一步（order_detail）方法的时候，就要把需要的参数值
					存入到session中，方便在下面支付方法的时候直接使用。
			其二：微信支付完成后，需要更改订单状态，并进入下一步的流程中去，
				    所以需要调用上一步（order_detail）方法，并传参处理。

代码部分：

/************************************************************************************************/
	html+js部分：
	<!DOCTYPE html>
	<html lang="en">
	<head>
		<meta charset="UTF-8">
		 <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width">
		<title>微信安全支付</title>

		<style>
			*{margin:0;padding: 0;list-style: none;}
			.content{width:100%;position: relative;}
			.back{width:100%;height:100%;position: absolute;top:0;left: 0;z-index: 2;background-color: #ccc;opacity: .8;}
			.pays{width:80%;height:60%;position: absolute;top:20%;margin-left: -40%;margin-top:-20%;left: 50%;border-radius: 20px;z-index: 10;background-color: #fff;}
			.pays>ul{width:92%;height:68%;margin:0 auto;}
			.pays>ul>li{width:100%;height:23%;}
			.pays>ul>li img{width:12%;float: left;margin:20px 0 0 0px;}
			label{width:23%;float: left;margin-top: 25px;color: #A3A3A3;padding-left: 3%;font-size: .8em;text-align:right;}
			.inp{height:60%;margin-top: 1%;width:55%;padding-top: 8px;float: right;border:none;outline: none;}
			.bac{margin-top:20px;}
		</style>
		<script>
		function onBridgeReady(){
		   WeixinJSBridge.invoke(
		       'getBrandWCPayRequest', 
		       <?php echo $jsApiParameters; ?>,
		       function(res){     
		           if(res.err_msg == "get_brand_wcpay_request:ok" ) {
						location.href="http://www.alywt.com/index.php/Weixin/Order/checkStatus.html";			
		             }else if(res.err_msg == "get_brand_wcpay_request:cancel"){
		             	alert("用户取消支付!"); 
		             }else{
		                //返回跳转到订单详情页面
		                alert("支付失败");
		                //location.href="http://www.gdddac.com/daodao/index.php/Weixin/Index/rescue.html";
				   	}   // 使用以上方式判断前端返回,微信团队郑重提示：res.err_msg将在用户支付成功后返回    ok，但并不保证它绝对可靠。 
		       }
		   ); 
		}
		function callpay(){
			if (typeof WeixinJSBridge == "undefined"){
				if( document.addEventListener ){
			       document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false);
			   }else if (document.attachEvent){
			       document.attachEvent('WeixinJSBridgeReady', onBridgeReady); 
			       document.attachEvent('onWeixinJSBridgeReady', onBridgeReady);
			   }
			}else{
			   onBridgeReady();
			}
		}	
		</script>
	</head>
	<body>
		<nav class="mui-bar mui-bar-tab"></nav>
		<div class="content">
			<div class="back"></div>		
			<div class="pays">
				<ul>
					<li style="">
						<p onclick="window.history.back();" class="bac"><span style="text-align: left;padding-left: 20px;color:#52C878;font-size: 1em;">返回</span></p>
						<br/>
						<p style="width:100%;text-align: center;"><span style="color: #1E1C22;font-size: 1.3em;">微信安全支付</span></p>
					</li>
					<li style="margin-top:30px;">
						<img src="WEIXIN_URL/img/金额@2x.png" alt="" style="width:30px;">
						<label for="" style="text-align:right;">金额</label>
						<input type="text" name="" id="" class="inp" style="color: #A3A3A3;width:40%;padding-top: 8px; text-align:right;float:left;border:none;outline: none;font-size:2rem"value="{{$_SESSION['money']}}">
					</li>
				</ul>
				<div style="text-align:center;width:100%;margin-top: 10px;">
				<button style="width:210px; height:30px; background-color:#52C878; border:0px #FE6714 solid; cursor: pointer;  color:white;  font-size:16px;" type="button" onclick="callpay()" >确认支付</button>
				</div>
			</div>
		</div>
		<script src="http://apps.bdimg.com/libs/jquery/2.1.1/jquery.min.js"></script>
		<script>
			window.onload=function(){
				$(".content").height($(window).height());
				$(window).resize(function(){
					$(".content").height($(window).height());
				});
			}
		</script>
	</body>
	</html>


/************************************************************************************************/
	PHP部分:
	<?php
		namespace Weixin\Controller;
		use Think\Controller;
		use Weixin\ORG\Jssdk;
		class OrderController extends BaseController {
			public function order_detail($id,$type,$complete){
		        $jssdk = new Jssdk(C('APP_ID'), C('APP_SECRET'));
		        $signPackage = $jssdk->getSignPackage();
		        !empty(I('id'))? $id = I('id') : $id;
		        !empty(I('type'))? $type = I('type') : $type;
		        !empty(I('complete'))? $complete = I('complete') : $complete;
		        $list = M('indent')->where("id=".$id)->find();
		        $list['machine_type'] = M('device_type')->where("id =".$list['machine_type'])->getField("name");
		        $_SESSION['indent_id'] = $id;
			    $_SESSION['order_num'] = $list['order_num'];
			    $_SESSION['money'] = $list["money"];
		        if($complete == 1){
		            //查看完成订单详情（甲方|乙方）
		            $this->assign("list",$list)->display($type.'_finish');
		        }else{
		            //查看未完成订单详情（甲方|乙方）
		            
		            $this->assign('signPackage',$signPackage);
		            $this->assign("list",$list)->display($type.'_unfinish');
		        }  
		    }
		    //前台跳转至支付页面
		    public function new_pay(){
		    	$money = session("money") * 100;
		    	//全局引入微信支付类
		        Vendor('Wxpay.lib.WxPayPubHelper');
		        //使用jsapi接口
		        $jsApi = new \JsApi_pub();
		        //=========步骤1：网页授权获取用户openid============
		        //通过code获得openid
		        /*if (!isset($_GET['code']))
		        {
		            //触发微信返回code码
		            $url = $jsApi->createOauthUrlForCode($this->fromurl);
		            Header("Location: $url");
		        }else
		        {
		            //获取code码，以获取openid
		            $code = $_GET['code'];
		            $jsApi->setCode($code);
		            $openid = $jsApi->getOpenId();
		        }
		        */
		        //=========步骤2：使用统一支付接口，获取prepay_id============
		        //使用统一支付接口
		        $unifiedOrder = new \UnifiedOrder_pub();
		        $unifiedOrder->setParameter("openid",$_SESSION['user']['openid']);//商品描述
		        //$type = M('rescue')->where(array('id'=>$_SESSION['pay_id']))->getField('typeing');
		        $unifiedOrder->setParameter("body",'医维通');//商品描述
		        //自定义订单号，此处仅作举例
		        $unifiedOrder->setParameter("out_trade_no",session('order_num'));//商户订单号
		        $unifiedOrder->setParameter("total_fee",$money);//总金额
		        $unifiedOrder->setParameter("notify_url","http://www.alywt.com/index.php/weixin/order/notify");//通知地址
		        $unifiedOrder->setParameter("trade_type","JSAPI");//交易类型
		        $prepay_id = $unifiedOrder->getPrepayId();
		        //=========步骤3：使用jsapi调起支付============
		        $jsApi->setPrepayId($prepay_id);
		        $jsApiParameters = $jsApi->getParameters();
		        $this->assign('jsApiParameters',$jsApiParameters);
		        $this->display();
		    }
		    //JSAPI支付通知
			public function notify(){
				//使用通用通知接口
				//全局引入微信支付类
				Vendor('Wxpay.lib.WxPayPubHelper');
				M("huidiao")->where("id=1")->setInc('sum'); 
				$notify = new \Notify_pub();
				$xml = $GLOBALS['HTTP_RAW_POST_DATA'];
				$notify->saveData($xml);
				$array_data=$notify->data;
				$this->set_php_file("weixin_xml.php", json_encode($array_data));
				//验证签名，并回应微信。
				//对后台通知交互时，如果微信收到商户的应答不是成功或超时，微信认为通知失败，
				//微信会通过一定的策略（如30分钟共8次）定期重新发起通知，
				//尽可能提高通知的成功率，但微信不保证通知最终能成功。
				$result['return_code'] = 'SUCCESS';
				$result['return_msg'] = $msg;
				$result['sign'] = $this->MakeSign($result);		
				$returnXml = $notify->returnXml($result);
				echo $returnXml;
				//==商户根据实际情况设置相应的处理流程，此处仅作举例=======
				//以log文件形式记录回调信息
				//$log_ = new Log_();
				$log_name= __ROOT__."/Public/Weixin/notify_url.log";//log文件路径
				log_result($log_name,"【接收到的notify通知】:\n".$xml."\n");
				if($notify->checkSign() == TRUE){
					if ($notify->data["return_code"] == "FAIL") {
						//此处应该更新一下订单状态，商户自行增删操作
						log_result($log_name,"【通信出错】:\n".$xml."\n");
					}
					elseif($notify->data["result_code"] == "FAIL"){
						//此处应该更新一下订单状态，商户自行增删操作
						log_result($log_name,"【业务出错】:\n".$xml."\n");
					}
					else{
						//此处应该更新一下订单状态，商户自行增删操作
						log_result($log_name,"【支付成功】:\n".$xml."\n");
					}
					//商户自行增加处理流程,
					//例如：更新订单状态
					//例如：数据库操作
					//例如：推送支付完成信息
				}
			}
			//支付成功改变状态
			public function checkStatus(){
				$id = session("indent_id");
				$data["id"] = $id;
				$data["status"] = 4;
				$data['pay_code'] = 2;
				$data["status4_time"] = date("Y-m-d H:i:s");
				$list = M('indent')->save($data);
				unset($_SESSION["money"]);
	            unset($_SESSION["repair_type"]);
				$this->order_detail($id,"ordera_detail",2);
			}
		}
	?>